package ui;

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import java.awt.Rectangle;
import java.awt.print.PrinterException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Vector;

import javax.swing.JTable;
import javax.swing.JButton;
import javax.swing.table.DefaultTableModel;

import dominio.Pedido;
import dominio.Producto;

import util.GuiUtilities;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class UIListados extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JScrollPane jScrollPane = null;
	private JTable jTable = null;
	private JButton btnImprimir = null;
	private JButton btnCantProdFab = null;
	private JButton btnPedidosXFecha = null;
	private DefaultTableModel tabModel=new DefaultTableModel();
	private JLabel lblFechaInicio = null;
	private JLabel lblFechaFin = null;
	private JTextField txtFechaIni = null;
	private JTextField txtFechaFin = null;
	/**
	 * This is the default constructor
	 */
	public UIListados() {
		super();
		initialize();
	}
	
	public DefaultTableModel getTabModel() {
		return tabModel;
	}
	
	public void setTabModel(DefaultTableModel tabModel) {
		this.tabModel = tabModel;
	}
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(698, 331);
		this.setContentPane(getJContentPane());
		this.setTitle("Listados");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			lblFechaFin = new JLabel();
			lblFechaFin.setBounds(new Rectangle(518, 5, 61, 29));
			lblFechaFin.setText("Fecha Fin");
			lblFechaInicio = new JLabel();
			lblFechaInicio.setBounds(new Rectangle(344, 7, 72, 22));
			lblFechaInicio.setText("Fecha Inicio");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJScrollPane(), null);
			jContentPane.add(getBtnImprimir(), null);
			jContentPane.add(getBtnCantProdFab(), null);
			jContentPane.add(getBtnPedidosXFecha(), null);
			jContentPane.add(lblFechaInicio, null);
			jContentPane.add(lblFechaFin, null);
			jContentPane.add(getTxtFechaIni(), null);
			jContentPane.add(getTxtFechaFin(), null);
			mostrarFechas();
		}
		return jContentPane;
	}

	/**
	 * This method initializes jScrollPane	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setBounds(new Rectangle(5, 36, 675, 219));
			jScrollPane.setViewportView(getJTable());
		}
		return jScrollPane;
	}

	/**
	 * This method initializes jTable	
	 * 	
	 * @return javax.swing.JTable	
	 */
	private JTable getJTable() {
		if (jTable == null) {
			jTable = new JTable(getTabModel()){
		/**
				 * 
				 */
				private static final long serialVersionUID = 1L;

		public boolean isCellEditable(int row, int column)
		{
		return false;
		}};
		}
		return jTable;
	}

	/**
	 * This method initializes btnImprimir	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnImprimir() {
		if (btnImprimir == null) {
			btnImprimir = new JButton();
			btnImprimir.setBounds(new Rectangle(439, 263, 106, 30));
			btnImprimir.setText("Imprimir");
			btnImprimir.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					try {
						getJTable().print();
					} catch (PrinterException e1) {
						GuiUtilities.showError(getJContentPane(),e1.getMessage());
					}
				}
			});
		}
		return btnImprimir;
	}

	/**
	 * This method initializes btnCantProdFab	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnCantProdFab() {
		if (btnCantProdFab == null) {
			btnCantProdFab = new JButton();
			btnCantProdFab.setBounds(new Rectangle(12, 6, 163, 25));
			btnCantProdFab.setToolTipText("Listado de las cantidades de los productos que se deben fabricar");
			btnCantProdFab.setText("Productos a Fabricar");
			btnCantProdFab.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					listadogetCantProdFab();
				}
			});
		}
		return btnCantProdFab;
	}

	protected void listadogetCantProdFab() {
		getJTable().removeAll();
		List<Producto> resultado = new ArrayList<Producto>();
		try {
				resultado=Fachada.getCantProdFab();
			if(!resultado.isEmpty()){
				Vector<String> columns=new Vector<String>();
				String[] columnnames={ 
						"Id","Nombre Producto","Total"
				};
				for(int i=0;i<columnnames.length;i++)
					columns.addElement((String) columnnames[i]);
				getTabModel().setRowCount(resultado.size());
				Vector<Object> lasRows=new Vector<Object>();
				for(int x=0;x<resultado.size();x++){
					Vector<Object> unaRow=new Vector<Object>();
					Producto prod=(Producto) resultado.get(x);
					unaRow.add(prod.getId());
					unaRow.add(prod.getNombre());	
					unaRow.add(prod.getTiempoProduccion());	
					lasRows.add(unaRow);
				}
				getTabModel().setDataVector(lasRows, columns);
			}
		} catch (Exception e) {
			GuiUtilities.showError(this,e.getMessage());
		}
	}
	
	protected void listadoPedidosXFecha(Date fecha1,Date fecha2) {
		getJTable().removeAll();
		List<Pedido> resultado = new ArrayList<Pedido>();
		try {
			resultado=Fachada.getPedidosXFecha(fecha1, fecha2);
			if(!resultado.isEmpty()){
				Vector<String> columns=new Vector<String>();
				String[] columnnames={ 
						"Id","Cliente","Pri Cliente","Estado","Fecha Entrega","Fecha Finalizado","Ganancia"
				};
				for(int i=0;i<columnnames.length;i++)
					columns.addElement((String) columnnames[i]);
				getTabModel().setRowCount(resultado.size());
				Vector<Object> lasRows=new Vector<Object>();
				for(int x=0;x<resultado.size();x++){
					Vector<Object> unaRow=new Vector<Object>();
					Pedido unPedido=(Pedido)resultado.get(x);
					unaRow.add(unPedido.getId());
					unaRow.add(unPedido.getCliente().getNombre());	
					unaRow.add(unPedido.getCliente().getPrioridad());	
					unaRow.add(unPedido.getEstado());
					SimpleDateFormat sdf=new java.text.SimpleDateFormat("dd/MM/yyyy");
					String fechaE = sdf.format(unPedido.getFechaEntrega());
					unaRow.add(fechaE);	
					if(unPedido.getFechaFinalizado()!=null){
						SimpleDateFormat sdf2=new java.text.SimpleDateFormat("dd/MM/yyyy - HH:mm");
						String fecha3 = sdf2.format(unPedido.getFechaFinalizado());
						unaRow.add(fecha3);	
					}else{
						unaRow.add("");}
					unaRow.add(Fachada.calcularGanancia(unPedido));
					lasRows.add(unaRow);

				}
				getTabModel().setDataVector(lasRows, columns);
			}
		} catch (Exception e) {
			GuiUtilities.showError(this,e.getMessage());
		}
	}

	/**
	 * This method initializes btnPedidosXFecha	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getBtnPedidosXFecha() {
		if (btnPedidosXFecha == null) {
			btnPedidosXFecha = new JButton();
			btnPedidosXFecha.setBounds(new Rectangle(195, 5, 146, 27));
			btnPedidosXFecha.setToolTipText("Dado un rango de fechas, indica los pedidos que se han finalizado");
			btnPedidosXFecha.setText("Pedidos Finalizados");
			btnPedidosXFecha.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					listadoPedidosXFecha();
				}
			});
		}
		return btnPedidosXFecha;
	}
	
	protected void listadoPedidosXFecha() {
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		try {
			Date fecha1= sdf.parse(txtFechaIni.getText());
			Date fecha2=sdf.parse(txtFechaFin.getText());
			listadoPedidosXFecha(fecha1, fecha2);
		} catch (ParseException e1) {
			GuiUtilities.showError(getJContentPane(),"El formato de las fechas debe ser dd/mm/aaaa");
		}
	}


	@SuppressWarnings("static-access")
	private void mostrarFechas() {
		GregorianCalendar cal=new GregorianCalendar();
		cal.setTime(new Date());
		txtFechaIni.setText(Integer.toString(cal.get(cal.DAY_OF_MONTH))+
		"/"+Integer.toString(cal.get(cal.MONTH))+"/"+Integer.toString(cal.get(cal.YEAR)));
		txtFechaFin.setText(Integer.toString(cal.get(cal.DAY_OF_MONTH))+
		"/"+Integer.toString(cal.get(cal.MONTH))+"/"+Integer.toString(cal.get(cal.YEAR)));
	}

	/**
	 * This method initializes txtFechaIni	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtFechaIni() {
		if (txtFechaIni == null) {
			txtFechaIni = new JTextField();
			txtFechaIni.setBounds(new Rectangle(423, 6, 87, 25));
		}
		return txtFechaIni;
	}

	/**
	 * This method initializes txtFechaFin	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtFechaFin() {
		if (txtFechaFin == null) {
			txtFechaFin = new JTextField();
			txtFechaFin.setBounds(new Rectangle(584, 8, 90, 23));
		}
		return txtFechaFin;
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"
